import { ref, computed } from 'vue'
import { defineStore } from 'pinia'

// 定义员工登录信息类型
/**
 * @typedef {Object} LoginInfo
 * @property {number} [id] - 员工ID
 * @property {string} [userName] - 用户名
 * @property {string} [name] - 姓名
 * @property {string} [token] - 令牌
 */

// Store是通过defineStore创建出来--------该对象用来管理所有的共享状态(数据加方法)
// authStore是一个唯一标识
// 是个函数
// 声明持久化
export const useAuthStore = defineStore('authStore', () => {
    // 定义存储用户登录信息的对象 - state
    const loginEmp = ref({})

    // 计算属性：是否已登录
    const isLoggedIn = computed(() => {
        return !!loginEmp.value.token
    })

    // 计算属性：获取用户信息
    const userInfo = computed(() => {
        return loginEmp.value
    })

    // 设置loginEmp
    const setLoginEmp = (loginInfo) => {
        loginEmp.value = loginInfo
        // 同时存储到localStorage用于持久化
        localStorage.setItem('token', loginInfo.token || '')
        localStorage.setItem('userInfo', JSON.stringify(loginInfo))
    }

    // 设置token
    const setToken = (token) => {
        loginEmp.value.token = token
        localStorage.setItem('token', token)
    }

    // 设置用户信息
    const setUserInfo = (info) => {
        loginEmp.value = { ...loginEmp.value, ...info }
        localStorage.setItem('userInfo', JSON.stringify(loginEmp.value))
    }

    // 获取用户登录信息----------loginEmp对象数据
    const getLoginEmp = () => {
        console.log('输出的结果:', loginEmp.value)
        return loginEmp.value
    }

    // 清除用户登录信息
    const removeLoginEmp = () => {
        loginEmp.value = {}
        localStorage.removeItem('token')
        localStorage.removeItem('userInfo')
    }

    // 初始化时从localStorage恢复数据
    const initFromStorage = () => {
        const token = localStorage.getItem('token')
        const userInfoStr = localStorage.getItem('userInfo')

        if (token) {
            loginEmp.value.token = token
        }

        if (userInfoStr) {
            try {
                const userInfo = JSON.parse(userInfoStr)
                loginEmp.value = { ...loginEmp.value, ...userInfo }
            } catch (error) {
                console.error('解析用户信息失败:', error)
            }
        }
    }

    return {
        loginEmp,
        isLoggedIn,
        userInfo,
        setLoginEmp,
        setToken,
        setUserInfo,
        getLoginEmp,
        removeLoginEmp,
        initFromStorage
    }
}, {
    persist: true
})
